home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / SCREEN.SWG / 0020_Screen Copy Utility.pas < prev    next >
Pascal/Delphi Source File  |  1993-06-22  |  3KB  |  107 lines

  1. unit scrncopy;
  2. interface
  3.  
  4. Const
  5.          bord : ARRAY [0..2, 0..5] Of Byte = (
  6.          ( 32, 32, 32, 32, 32, 32),
  7.          ( 196, 179, 218, 191, 217, 192),
  8.          ( 205, 186, 201, 187, 188, 200));
  9.  
  10. procedure copyscrn (scrn1,scrn2 : Byte);
  11. {copy the screen}
  12.  
  13. Procedure savescrn (scrn : Byte);
  14. {saves the designated screen in RAM memory}
  15.  
  16. Procedure restorescrn (scrn : Byte);
  17. {restores the screen to the designated page}
  18.  
  19. procedure drawborder (Fg,Bg,ur,lc,lr,rc,lines,page : Word);
  20. {draw the borders, optionally clears the screen}
  21. {Fg is the foreground color, Bg is the background color,
  22.  ur is the upper row, lc is the left column,
  23.  lr is the lower row, rc is the right column,
  24.  lines is:
  25.    0 for clear screen;
  26.    1 for single lines (─┐);
  27.    2 for double lines (═╗);
  28.  page is the screen page to draw the border on}
  29.  
  30. implementation
  31. Type
  32.         Hold = ARRAY[0..4047] Of Byte;
  33.  
  34. VAR
  35.         x : Word;
  36.         tmpscrn : ^Hold;
  37. Procedure copyscrn (scrn1, scrn2 : Byte);
  38. Begin
  39.         For x := 0 To 4047 Do
  40.             Mem[$B800:(scrn2*$1000+x)] := Mem[$B800:(scrn1*$1000+x)];
  41. End;
  42. Procedure savescrn (scrn : Byte);
  43. Begin
  44.         New(tmpscrn);
  45.         For x := 0 To 4047 Do
  46.             tmpscrn^[x] := Mem[$B800:(scrn*$1000+x)];
  47. End;
  48.  
  49. Procedure restorescrn (scrn : Byte);
  50. Begin
  51.         For x := 0 To 4047 Do
  52.             Mem[$B800:(scrn*$1000+x)] := tmpscrn^[x];
  53.             Dispose(tmpscrn);
  54. End;
  55.  
  56. Procedure drawborder (Fg,Bg,ur,lc,lr,rc,lines,page : Word);
  57. VAR
  58.         x, y, point : Word;
  59. Begin
  60.         page := $B800 + (page * $100);
  61.         Fg := 16 * Bg + Fg;
  62.         Dec(ur);
  63.         Dec(lc);
  64.         Dec(lr);
  65.         Dec(rc);
  66.         point := ur * 80 * 2 + lc * 2;
  67.         Mem[page:point] := bord[lines,2];
  68.         Mem[page:point + 1] := Fg;
  69.         point := point + 2;
  70.         For x := point To (ur * 80 * 2 + (rc-1) * 2) + 1 Do Begin
  71.             Mem[page:x] := bord[lines,0];
  72.             Inc(x);
  73.             Mem[page:x] := Fg;
  74.             End;
  75.         point := ur * 80 * 2 + rc * 2;
  76.         Mem[page:point] := bord[lines,3];
  77.         Mem[page:point+1] := Fg;
  78.         For x := ur + 1 To lr - 1 Do Begin
  79.             point := x * 80 * 2 + lc * 2;
  80.             Mem[page:point] := bord[lines,1];
  81.             Mem[page:point + 1] := Fg;
  82.             For y := lc + 1 To rc - 1 Do Begin
  83.                 point := x * 80 * 2 + y * 2;
  84.                 Mem[page:point] := 32;
  85.                 Mem[page:point+1] := Fg;
  86.                 End;
  87.             point := x * 80 * 2 + rc * 2;
  88.             Mem[page:point] := bord[lines,1];
  89.             Mem[page:point + 1] := Fg;
  90.             End;
  91.         point := lr * 80 * 2 + lc * 2;
  92.         Mem[page:point] := bord[lines,5];
  93.         Mem[page:point + 1] := Fg;
  94.         point := point + 2;
  95.         For x := point To (lr * 80 * 2 + (rc-1) * 2) + 1 Do Begin
  96.             Mem[page:x] := bord[lines,0];
  97.             Inc(x);
  98.             Mem[page:x] := Fg;
  99.             End;
  100.         point := lr * 80 * 2 + rc * 2;
  101.         Mem[page:point] := bord[lines,4];
  102.         Mem[page:point+1] := Fg;
  103. End;
  104.  
  105. End.
  106.  
  107.